# coding=UTF-8
# 异或运算
def XOR(str1, str2):
    ans = ''
    if str1[0] == '0':
        return '0', str1[1:]
    else:
        for i in range(len(str1)):
            if(str1[i]=='0' and str2[i]=='0'):
                ans = ans + '0'
            elif (str1[i]=='1' and str2[i]=='1'):
                ans = ans + '0'
            else:
                ans = ans + '1'
    return '1', ans[1:]
# CRC编码
def CRC_Encoding(str1, str2):
    lenght = len(str2)
    str3 = str1 + '0'*(lenght-1)
    ans = ''
    yus = str3[0:lenght]
    for i in range(len(str1)):
        str4, yus = XOR(yus, str2)
        ans = ans + str4
        if i == len(str1) - 1:
            break
        else:
            yus = yus + str3[i+lenght]
    ans = str1 + yus
    return ans
# CRC验证
def CRC_Decoding(str1, str2):
    lenght = len(str2)
    str3 = str1 + '0'*(lenght-1)
    ans = ''
    yus = str3[0:lenght]
    for i in range(len(str1)):
        str4, yus = XOR(yus, str2)
        ans = ans + str4
        if i == len(str1) - 1:
            break
        else:
            yus = yus + str3[i+lenght]
    return yus == '0'*len(yus)

def main():
    while True:
        print('=='*30)
        setting = input("请输入运行模式（0：退出，1：CRC编码，2：CRC验证）：")
        if setting == '0':
            break
        elif setting == '1':
            str1 = input("请输入数据：")
            str2 = input("请输入生成比特模式：")
            str3 = CRC_Encoding(str1, str2)
            print("{}编码后为：{}".format(str1, str3))
        elif setting == '2':
            str1 = input("请输入验证数据：")
            str2 = input("请输入生成比特模式：")
            flag = CRC_Decoding(str1, str2)
            if flag:
                print("验证完成，未出错")
            else:
                print("sorry 验证数据已出错")
        else:
            print("请正确输入：")
main()
"""
测试结果
============================================================
请输入运行模式（0：退出，1：CRC编码，2：CRC验证）：1
请输入数据：1101011011
请输入生成比特模式：10011
1101011011编码后为：11010110111110
============================================================
请输入运行模式（0：退出，1：CRC编码，2：CRC验证）：2
请输入验证数据：11010110111110
请输入生成比特模式：10011
验证完成，未出错
============================================================
请输入运行模式（0：退出，1：CRC编码，2：CRC验证）：2
请输入验证数据：11010110111100
请输入生成比特模式：10011
sorry 验证数据已出错
============================================================
请输入运行模式（0：退出，1：CRC编码，2：CRC验证）：
"""